package com.thirteen.app.daoTest;

import com.thirteen.app.dto.CreateExamRequest.ExamDto;
import com.thirteen.app.dto.ExamConditionDto;
import com.thirteen.app.dto.ExamRecordResponse.SelectExamByNameDto;
import com.thirteen.app.dto.ExamResponse.ExamListStudentDto;
import com.thirteen.app.dto.ExamResponse.ExamListTeacherDto;
import com.thirteen.app.dto.ExamResponse.SelectByIdDto;
import com.thirteen.app.dto.ExamResponse.SelectExamByUserDto;
import com.thirteen.app.dto.PaperList;
import com.thirteen.app.entity.Exam;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface ExamDao {

    //    通过id查一条考试数据
    Exam queryById(@Param("examId") Integer examId);

    //    获取最大考试次数
    Integer queryMaxTryCount(@Param("examId") Integer examId);

    //    插入一条考试记录并返回examId
    Integer insertExam(@Param("examDto") ExamDto examDto);

    //    学生查出考试列表
    List<ExamListStudentDto> queryAllExamStudent(@Param("examConditionDto") ExamConditionDto examConditionDto);

    //    老师查出考试列表
    List<ExamListTeacherDto> queryAllExamTeacher(@Param("examConditionDto") ExamConditionDto examConditionDto);

//    zql&ar

    PaperList getExamPaperList(@Param("examId") Integer examId);

    //wc
    List<Exam> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);

    //更新考试信息
    int update(@Param("exam") Exam exam);

    //删除考试，设置考试状态为0
    int deleteById(Integer examid);

    //获取考试数量
    int getExamCount();

    //筛选出某一时间段内的所有仍在进行中的用户（限用学生）选的课程名为“”的考试
    List<SelectByIdDto> queryAllByTime(String beginTime, String endTime, String examName, Integer userId);

    //筛选出用户在某段时间内参加过的名称为“”的考试以及成绩（用于我的成绩模块）
    List<SelectExamByUserDto> queryAllByUser(@Param("examConditionDto") ExamConditionDto examConditionDto);

    //筛选用户已考某次考试的次数
    Integer queryTryCount(Integer examId, Integer userId);

    //筛选出该用户所出开始时间在某时间段内地并且仍在进行的考试
    List<SelectByIdDto> queryAllByTeacherTime(String beginTime, String endTime, String examName, Integer userId);

    //查询考试的发布人
    Integer queryUserIdByExamId(Integer examId);

    //根据名称查考试信息
    List<SelectExamByNameDto> selectExamByName(@Param("examName") String examName);

    //查询参加某考试的考试人数
    Integer selectUserCountByExamName(String examName);
}
